(Fkill_buffer): Call the Vkill_buffer_query_functions.
authorRichard M. Stallman <rms@gnu.org>
Thu, 24 Feb 1994 05:34:16 +0000 (05:34 +0000)
committerRichard M. Stallman <rms@gnu.org>
Thu, 24 Feb 1994 05:34:16 +0000 (05:34 +0000)
(syms_of_buffer): Make Lisp var for kill-buffer-query-functions.

src/buffer.c

index 638a3f70241c34fa088292edf77bc03cd73f8f09..2f21a7b133f293655ddcb290141a99a43aaf2aa7 100644 (file)
@@ -117,6 +117,10 @@ Lisp_Object Vtransient_mark_mode;
    Any non-nil value means ignore buffer-read-only.  */
 Lisp_Object Vinhibit_read_only;
 
+/* List of functions to call that can query about killing a buffer.
+   If any of these functions returns nil, we don't kill it.  */
+Lisp_Object Vkill_buffer_query_functions;
+
 /* List of functions to call before changing an unmodified buffer.  */
 Lisp_Object Vfirst_change_hook;
 Lisp_Object Qfirst_change_hook;
@@ -729,13 +733,25 @@ with `delete-process'.")
        return Qnil;
     }
 
-  /* Run kill-buffer hook with the buffer to be killed the current buffer.  */
+  /* Run hooks with the buffer to be killed the current buffer.  */
   {
     register Lisp_Object val;
     int count = specpdl_ptr - specpdl;
+    Lisp_Object list;
 
     record_unwind_protect (save_excursion_restore, save_excursion_save ());
     set_buffer_internal (b);
+
+    /* First run the query functions; if any query is answered no,
+       don't kill the buffer.  */
+    for (list = Vkill_buffer_query_functions; !NILP (list); list = Fcdr (list))
+      {
+       tem = call0 (Fcar (list));
+       if (NILP (tem))
+         return unbind_to (count, Qnil);
+      }
+
+    /* Then run the hooks.  */
     call1 (Vrun_hooks, Qkill_buffer_hook);
     unbind_to (count, Qnil);
   }
@@ -2615,6 +2631,10 @@ and disregard a `read-only' text property if the property value\n\
 is a member of the list.");
   Vinhibit_read_only = Qnil;
 
+  DEFVAR_LISP ("kill-buffer-query-functions", &Vkill_buffer_query_functions,
+    "List of functions called with no args to query before killing a buffer.");
+  Vkill_buffer_query_functions = Qnil;
+
   defsubr (&Sbuffer_list);
   defsubr (&Sget_buffer);
   defsubr (&Sget_file_buffer);